{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  pima 糖尿病\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "### 特征工程及数据探索\n",
    "\n",
    "###import relative pkg\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import log_loss\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n",
    "\n",
    "#read csv\n",
    "\n",
    "data = pd.read_csv('diabetes.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pregnancies 怀孕次数 Glucose 血糖含量 bloodpressure 血压 skinthickness皮肤厚度 insulin 胰岛素含量 BMI Body Mass Index 体重指数\n",
    "DiabetesPedigreeFunction 糖尿病家族因素？ age 年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8个特征 一个output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,u'counts')"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xe42ca58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "### 查看output分布\n",
    "sns.countplot(data['Outcome'])\n",
    "pyplot.xlabel('diabetes result')\n",
    "pyplot.ylabel('counts')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 应该是糖尿病 发病人数 低于 正常人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "#分割数据集和测试集\n",
    "y = data['Outcome']\n",
    "#print 'y::::',y\n",
    "X=data.drop(['Outcome'],axis=1)\n",
    "#X_train = np.array(X)\n",
    "#y_train = y\n",
    "#columns = X.columns\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=33,test_size=0.2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#data normalize\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.fit_transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of each fold is:  [ 0.46129644  0.46510588  0.56426612  0.44377717  0.46617809]\n",
      "cv logloss is: 0.480124740047\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "lr = LogisticRegression()\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "loss = cross_val_score(lr, X_train, y_train, cv=5, scoring='neg_log_loss')\n",
    "print 'logloss of each fold is: ',-loss\n",
    "print'cv logloss is:', -loss.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 带正则的 logistics regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "\n",
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "lr_penalty= LogisticRegression()\n",
    "grid= GridSearchCV(lr_penalty, tuned_parameters,cv=5, scoring='neg_log_loss')\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 0.        ,  0.00299997,  0.        ,  0.00639997,  0.        ,\n",
       "         0.00320001,  0.00319996,  0.        ,  0.        ,  0.00300002,\n",
       "         0.00300002,  0.00299997,  0.00300002,  0.00319996]),\n",
       " 'mean_score_time': array([ 0.00620003,  0.        ,  0.00300002,  0.        ,  0.00299997,\n",
       "         0.        ,  0.00300002,  0.        ,  0.00320001,  0.        ,\n",
       "         0.        ,  0.        ,  0.        ,  0.        ]),\n",
       " 'mean_test_score': array([-0.69314718, -0.64214833, -0.6721329 , -0.52844007, -0.48659377,\n",
       "        -0.47999943, -0.48043745, -0.48017599, -0.48089892, -0.48086932,\n",
       "        -0.48095354, -0.48095123, -0.48095695, -0.48095956]),\n",
       " 'mean_train_score': array([-0.69314718, -0.6412946 , -0.67079105, -0.52380684, -0.47502564,\n",
       "        -0.46674403, -0.46228791, -0.46214818, -0.46206766, -0.46206619,\n",
       "        -0.46206531, -0.4620653 , -0.46206529, -0.46206529]),\n",
       " 'param_C': masked_array(data = [0.001 0.001 0.01 0.01 0.1 0.1 1 1 10 10 100 100 1000 1000],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'param_penalty': masked_array(data = ['l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2' 'l1' 'l2'],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  1,  3,  2,  5,  4,  7,  6,  8,  9]),\n",
       " 'split0_test_score': array([-0.69314718, -0.64371675, -0.66946739, -0.52816851, -0.48618862,\n",
       "        -0.4678555 , -0.46345814, -0.46129644, -0.46108746, -0.46088502,\n",
       "        -0.46087218, -0.4608487 , -0.46084578, -0.46084513]),\n",
       " 'split0_train_score': array([-0.69314718, -0.64085132, -0.66189542, -0.52529099, -0.4782397 ,\n",
       "        -0.47085398, -0.46684266, -0.46669378, -0.46662377, -0.46662226,\n",
       "        -0.46662152, -0.46662149, -0.46662149, -0.46662148]),\n",
       " 'split1_test_score': array([-0.69314718, -0.64113725, -0.67517494, -0.52518603, -0.47168315,\n",
       "        -0.47077815, -0.46426456, -0.46510588, -0.46463346, -0.46473286,\n",
       "        -0.46468731, -0.46469927, -0.46469053, -0.46469595]),\n",
       " 'split1_train_score': array([-0.69314718, -0.64188719, -0.67797602, -0.52532854, -0.47970377,\n",
       "        -0.47076994, -0.46692696, -0.46678157, -0.46671601, -0.4667146 ,\n",
       "        -0.4667139 , -0.46671388, -0.46671388, -0.46671388]),\n",
       " 'split2_test_score': array([-0.69314718, -0.64575466, -0.6680453 , -0.5512625 , -0.54752613,\n",
       "        -0.54301469, -0.56470031, -0.56426612, -0.5684721 , -0.56834734,\n",
       "        -0.56880014, -0.56879096, -0.56882659, -0.5688357 ]),\n",
       " 'split2_train_score': array([-0.69314718, -0.63908575, -0.66162164, -0.5135644 , -0.4556453 ,\n",
       "        -0.44783203, -0.44194598, -0.44184498, -0.44173184, -0.44173047,\n",
       "        -0.44172922, -0.4417292 , -0.44172919, -0.44172919]),\n",
       " 'split3_test_score': array([-0.69314718, -0.63856226, -0.67581323, -0.50975335, -0.45503471,\n",
       "        -0.44706595, -0.44365976, -0.44377717, -0.44397769, -0.44400066,\n",
       "        -0.44403049, -0.4440332 , -0.44403529, -0.44403656]),\n",
       " 'split3_train_score': array([-0.69314718, -0.64333601, -0.67874616, -0.5309552 , -0.48382604,\n",
       "        -0.47509784, -0.47066665, -0.47052445, -0.4704446 , -0.47044314,\n",
       "        -0.47044228, -0.47044226, -0.47044225, -0.47044225]),\n",
       " 'split4_test_score': array([-0.69314718, -0.64152376, -0.67221592, -0.52767402, -0.47216566,\n",
       "        -0.47104103, -0.46582474, -0.46617809, -0.46606416, -0.46612355,\n",
       "        -0.46612005, -0.4661268 , -0.46612934, -0.46612722]),\n",
       " 'split4_train_score': array([-0.69314718, -0.64131272, -0.67371601, -0.52389506, -0.47771337,\n",
       "        -0.46916638, -0.46505732, -0.46489609, -0.46482207, -0.46482048,\n",
       "        -0.46481966, -0.46481964, -0.46481963, -0.46481963]),\n",
       " 'std_fit_time': array([ 0.        ,  0.00599995,  0.        ,  0.00783832,  0.        ,\n",
       "         0.00640001,  0.00639992,  0.        ,  0.        ,  0.00600004,\n",
       "         0.00600004,  0.00599995,  0.00600004,  0.00639992]),\n",
       " 'std_score_time': array([ 0.00760003,  0.        ,  0.00600004,  0.        ,  0.00599995,\n",
       "         0.        ,  0.00600004,  0.        ,  0.00640001,  0.        ,\n",
       "         0.        ,  0.        ,  0.        ,  0.        ]),\n",
       " 'std_test_score': array([ 0.        ,  0.00243715,  0.00305426,  0.0132657 ,  0.03205606,\n",
       "         0.03276814,  0.04294374,  0.04285084,  0.04453271,  0.04448689,\n",
       "         0.04466507,  0.04466183,  0.04467626,  0.04467945]),\n",
       " 'std_train_score': array([ 0.        ,  0.00138524,  0.00757197,  0.00566626,  0.00992455,\n",
       "         0.00965834,  0.01033376,  0.01031565,  0.01033122,  0.01033118,\n",
       "         0.01033136,  0.01033136,  0.01033136,  0.01033136])}"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 当前最优解"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.479999434937\n",
      "{'penalty': 'l2', 'C': 0.1}\n"
     ]
    }
   ],
   "source": [
    "print(-grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xe8378d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'neg-logloss' )\n",
    "pyplot.savefig('LogisticGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 测试集上显示C值越大准确率越高，在验证集上 当 C为0.1的时候 模型的准确率最高"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用 logistics regression "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.1, 1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l1',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [0.1,1, 10,100,1000]\n",
    "\n",
    "lrcv_L1 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l1', solver='liblinear', multi_class='ovr')\n",
    "lrcv_L1.fit(X_train, y_train)   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.48617952, -0.46346075, -0.46108627, -0.46086845, -0.46084602],\n",
       "        [-0.47166587, -0.46426604, -0.46463263, -0.46468853, -0.46469094],\n",
       "        [-0.5475285 , -0.56469315, -0.56847805, -0.56879576, -0.56883292],\n",
       "        [-0.45502958, -0.44365764, -0.44397824, -0.44402879, -0.44403619],\n",
       "        [-0.47216293, -0.46581868, -0.46606734, -0.4661163 , -0.46612736]])}"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.]\n",
      "[[ 0.41993511  1.11863898 -0.23275573  0.03890806 -0.10276706  0.72285642\n",
      "   0.20819949  0.13345377]]\n"
     ]
    }
   ],
   "source": [
    "print lrcv_L1.C_\n",
    "print lrcv_L1.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[0.1, 1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [0.1,1, 10,100,1000]\n",
    "\n",
    "lrcv_L2 = LogisticRegressionCV(Cs=Cs, cv = 5, scoring='neg_log_loss', penalty='l2', solver='liblinear', multi_class='ovr')\n",
    "lrcv_L2.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1: array([[-0.4678555 , -0.46129644, -0.46088502, -0.4608487 , -0.46084513],\n",
      "       [-0.47077815, -0.46510588, -0.46473286, -0.46469927, -0.46469595],\n",
      "       [-0.54301469, -0.56426612, -0.56834734, -0.56879096, -0.5688357 ],\n",
      "       [-0.44706595, -0.44377717, -0.44400066, -0.4440332 , -0.44403656],\n",
      "       [-0.47104103, -0.46617809, -0.46612355, -0.4661268 , -0.46612722]])}\n",
      "[ 0.1]\n",
      "[[ 0.36335039  0.96698821 -0.18799146  0.05061462 -0.06522072  0.61209275\n",
      "   0.19578199  0.15557939]]\n"
     ]
    }
   ],
   "source": [
    "print lrcv_L2.scores_\n",
    "print lrcv_L2.C_\n",
    "print lrcv_L2.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.75      0.90      0.82        99\n",
      "          1       0.72      0.47      0.57        55\n",
      "\n",
      "avg / total       0.74      0.75      0.73       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[89 10]\n",
      " [29 26]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "lsvc = LinearSVC().fit(X_train,y_train)\n",
    "y_predict = lsvc.predict(X_test)\n",
    "from sklearn import metrics\n",
    "print \"Classification report for classifier %s:\\n%s\\n\"%(lsvc, metrics.classification_report(y_test, y_predict))\n",
    "print \"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_test, y_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性svm参数调优\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_func(c,X_train,X_test,y_train,y_test):\n",
    "    svc = LinearSVC( C = c).fit(X_train, y_train)\n",
    "    accuracy = svc.score(X_test, y_test)\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.72077922077922074, 0.73376623376623373, 0.74025974025974028, 0.74675324675324672, 0.74025974025974028, 0.63636363636363635, 0.53246753246753242]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xeb45198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_func(oneC, X_train, X_test, y_train, y_test)\n",
    "    accuracy_s.append(tmp)\n",
    "print accuracy_s\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#RBF核 参数调优\n",
    "def fit_RBF(C, gamma, X_train, X_test, y_train, y_test):\n",
    "\n",
    "    svc =  SVC( C = C, kernel='rbf', gamma = gamma).fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = svc.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.701298701299\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.733766233766\n",
      "accuracy: 0.74025974026\n",
      "accuracy: 0.675324675325\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.74025974026\n",
      "accuracy: 0.701298701299\n",
      "accuracy: 0.688311688312\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.753246753247\n",
      "accuracy: 0.681818181818\n",
      "accuracy: 0.688311688312\n",
      "accuracy: 0.642857142857\n",
      "accuracy: 0.642857142857\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "from sklearn.svm import SVC\n",
    "C_s = np.logspace(-2, 2, 5)\n",
    "gamma_s = np.logspace(-2, 2, 5)\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_RBF(oneC, gamma, X_train, X_test, y_train, y_test)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xe3fc4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
